layui.define(['jquery'],function(exports){

	var $ = layui.$, TreeStructure = new Function();
	function Map() {
			this.elements = new Array();
			this.size = function() {
				return this.elements.length;
			}

			this.isEmpty = function() {
				return (this.elements.length < 1);
			}

			this.clear = function() {
				this.elements = new Array();
			}

			this.put = function(_key, _value) {
				if (!this.containsKey(_key))
					this.elements.push({key : _key,value : _value});
			}

			this.remove = function(_key) {
				var bln = false;
				try {
					for (i = 0; i < this.elements.length; i++) {
						if (this.elements[i].key === _key) {
							this.elements.splice(i, 1);
							return true;
						}
					}
				} catch (e) {
					bln = false;
				}
				return bln;
			}

			this.get = function(_key) {
				try {
					for (i = 0; i < this.elements.length; i++) {
						if (this.elements[i].key === _key) {
							return this.elements[i].value;
						}
					}
				} catch (e) {
					return null;
				}
			}

			this.element = function(_index) {
				if (_index < 0 || _index >= this.elements.length) {
					return null;
				}
				return this.elements[_index];
			}

			this.containsKey = function(_key) {
				var bln = false;
				try {
					for (i = 0; i < this.elements.length; i++) {
						if (this.elements[i].key === _key) {
							bln = true;
						}
					}
				} catch (e) {
					bln = false;
				}
				return bln;
			}

			this.containsValue = function(_value) {
				var bln = false;
				try {
					for (i = 0; i < this.elements.length; i++) {
						if (this.elements[i].value === _value) {
							bln = true;
						}
					}
				} catch (e) {
					bln = false;
				}
				return bln;
			}

			this.values = function() {
				var arr = new Array();
				for (i = 0; i < this.elements.length; i++) {
					arr.push(this.elements[i].value);
				}
				return arr;
			}

			this.keys = function() {
				var arr = new Array();
				for (i = 0; i < this.elements.length; i++) {
					arr.push(this.elements[i].key);
				}
				return arr;
			}
		}

	TreeStructure.prototype.createTreeStructureNodes = function(opts) {
		var defaultOptions = {items:[], id:"nodeId", pid:'pid', isMenu:false};
		defaultOptions = $.extend(defaultOptions, opts);
		var map = new Map();
		for(var i = 0; i < opts.items.length; i++){
			var item = defaultOptions.items[i];
			if(defaultOptions.isMenu) {
				if(item.typeNode &&  !("03" == item.typeNode)){
					continue;
				}
			}
			item.id = item[defaultOptions.id];
			item.pid = item[defaultOptions.pid];
			item.title = item.nameNode;
			item.font = "larry-icon";
			item.url = item.nodeUrl ? item.nodeUrl : "";
			item.param = "";
			item.condition = "";
			item.spread = false;
			item.children = null;
			map.put(item.id, item);
		}

		var tree = new Array();
		for(var j = 0; j < opts.items.length; j++){
			var item = defaultOptions.items[j];
			if(item.pid){
				var pid = item.pid;
			}
			item.spread = true;
			item.name = item.nameNode;
			var parent = map.get(item.pid);
			if(parent == null){
				item.children = new Array();
				tree.push(item);
			}else {
				var children = parent.children;
				if(children == null){
					parent.children = new Array();
				}
				parent.children.push(item);
			}
		}
		return tree;
	}

	TreeStructure.prototype.setTreeNodeChecked = function(treeNodes, ownCheckedTreeNodes) {
		if(!ownCheckedTreeNodes || ownCheckedTreeNodes.length == 0){
			return treeNodes;
		}

		for(var i = 0 ; i < treeNodes.length; i++){
			var node = treeNodes[i];
			for(var m in ownCheckedTreeNodes){
				var object = ownCheckedTreeNodes[m];
				if(object.id == node.id){
					node.checked = true;
					break;
				}
			}
		}
	}
	var treeStructure = new TreeStructure();
	exports('beoneTree', treeStructure);
})